package com.wangsh.usersCenter.common.util;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Component;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 字符的工具类
 * @author Xh-Win10-Server
 */
@Component("characterUtil")
public class CharacterUtil
{
	private HanyuPinyinOutputFormat defaultFormat ;
	
	/**
	 * 初始化构造函数
	 */
	public CharacterUtil()
	{
		/* 创建一个类 */
		defaultFormat = new HanyuPinyinOutputFormat();
		/* 拼音全部小写 */
		defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		/* 标点符号的输出 */
		defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
	}
	
	/**
	 * 汉字转拼音
	 * @return
	 */
	public String chineseToPinyin(String chinese)
	{
		StringBuffer sb = new StringBuffer();
		/* 把汉字解析为一个一个的字符数组 */
		char[] newChar = chinese.toCharArray();
		/* 对字符数组一个一个的转换 */
		for (int i = 0; i < newChar.length; i++)
		{
			char tempChar = newChar[i] ;
			/* 如果字符大于128,才需要转汉字 */
			if (tempChar > 128)
			{
				try
				{
					/* 转换拼音
					 * 参数1:字符,
					 * 参数2:格式
					 *  */
					String[] pinyinArr = PinyinHelper.toHanyuPinyinStringArray(tempChar, defaultFormat);
					StringBuffer pinyinSb = new StringBuffer();
					List<String> pinyinList = new ArrayList<String>();
					for (int j = 0; j < pinyinArr.length; j++)
					{
						String pinyin = pinyinArr[j];
						if(!pinyinList.contains(pinyin))
						{
							pinyinSb.append(pinyin);
							pinyinList.add(pinyin);
						}
					}
					/* 将结果保存 */
					sb.append(pinyinSb.toString());
				} catch (BadHanyuPinyinOutputFormatCombination e)
				{
					e.printStackTrace();
				}
			} else
			{
				/* 本身就是非汉字 */
				sb.append(tempChar);
			}
		}
		return sb.toString();
	}
}
